﻿using System;
using System.Threading;

// 定义闹钟类
public class AlarmClock
{
    // 定义Tick事件
    public event EventHandler Tick;
    // 定义Alarm事件
    public event EventHandler Alarm;

    // 闹钟的当前时间
    private DateTime currentTime;
    // 闹钟的设定时间
    private DateTime alarmTime;

    // 构造函数，初始化闹钟的当前时间和设定时间
    public AlarmClock(DateTime alarmTime)
    {
        this.currentTime = DateTime.Now;
        this.alarmTime = alarmTime;
    }

    // 启动闹钟
    public void Start()
    {
        while (currentTime < alarmTime)
        {
            // 每秒触发一次Tick事件
            Thread.Sleep(1000);
            currentTime = DateTime.Now;
            OnTick();
        }

        // 触发Alarm事件
        OnAlarm();
    }

    // 触发Tick事件
    protected virtual void OnTick()
    {
        Tick?.Invoke(this, EventArgs.Empty);
    }

    // 触发Alarm事件
    protected virtual void OnAlarm()
    {
        Alarm?.Invoke(this, EventArgs.Empty);
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 设置闹钟的响铃时间为当前时间加10秒
        DateTime alarmTime = DateTime.Now.AddSeconds(10);

        // 创建闹钟实例
        AlarmClock alarmClock = new AlarmClock(alarmTime);

        // 订阅Tick事件
        alarmClock.Tick += (sender, e) =>
        {
            Console.WriteLine($"Tick: {DateTime.Now}");
        };

        // 订阅Alarm事件
        alarmClock.Alarm += (sender, e) =>
        {
            Console.WriteLine("Alarm! Time's up!");
        };

        // 启动闹钟
        Console.WriteLine($"Alarm set for {alarmTime}");
        alarmClock.Start();
    }
}